package bme.andraskindler.treenventory;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import bme.andraskindler.treenventory.db.TreeStorage;
import bme.andraskindler.treenventory.model.TreeData;

/**
 * A faadatok kezelésével kapcsolatos controller, az elérhetősége: http://localhost:8080/TreenventoryWeb/treeservice/.
 * @author andraskindler
 *
 */
@Controller
@RequestMapping("/treeservice")
public class TreeController {

	private static final TreeStorage storage = new TreeStorage();

	/**
	 * GET függvény, mely visszatér az összes tárolt fa adatával.
	 * @return
	 */
	@RequestMapping(method = RequestMethod.GET)
	public @ResponseBody
	List<TreeData> getTrees() {
		return storage.getAll();
	}

	/**
	 * Post függvény, meny a paraméterként kapott fát tárolja adatbázisban.
	 * @param tree - a tárolandó fa.
	 */
	@RequestMapping(method = RequestMethod.POST)
	@ResponseBody
	public void addTree(@RequestBody TreeData tree) {
		storage.add(tree);
	}

	/**
	 * PUT függvény, mely a faadatok módosítására szolgál.
	 * @param id - a módosítandó fa ID-je.
	 * @param tree - az új faadatok.
	 */
	@RequestMapping(value = "{id}", method = RequestMethod.PUT)
	@ResponseBody
	public void putTree(@PathVariable int id, @RequestBody TreeData tree) {
		tree.setId(id);
		storage.update(tree);
	}

	/**
	 * DELETE függvény, a fa törlésére szolgál.
	 * @param id - a törölni kívánt fa id-je. Ha -1, az összes fát törli.
	 */
	@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
	@ResponseBody
	public void deleteTree(@PathVariable long id) {
		storage.delete(id);
	}

}